import router, { asyncRoutes } from './router'
import store from './store'
// import NProgress from 'nprogress' // progress bar
// import 'nprogress/nprogress.css' // progress bar style
import { getToken } from '@/views/utils/auth'
// NProgress.configure({ showSpinner: false }) // NProgress Configuration

const whiteList = ['/login', '/404']

// 路由前置守卫 (每次路由跳转之前)
router.beforeEach(async(to, from, next) => {
  // 开启进度条
  // NProgress.start()
  // 判断token是否存在
  if (getToken()) {
    // 直接放行
    next()
    if (!store.state.user.profile.id) {
      try {
        // 获取用户信息
        const userInfo = await store.dispatch('user/getProfileAction')
        console.log('用户信息:', userInfo)
        // 判断是否是管理员 - 检查用户名或角色
        // 这里添加多种判断方式，提高识别管理员的准确性
        const isAdmin = userInfo.name === '黑马管理员' || userInfo.userId === 1
        // 如果是管理员，直接添加所有路由
        if (isAdmin) {
          console.log('添加所有路由:', asyncRoutes)
          // 清空菜单列表，避免重复添加
          store.commit('menu/setMenuList', [])
          // 添加所有路由
          asyncRoutes.forEach(route => {
            router.addRoute(route)
          })
          // 存储菜单列表
          store.commit('menu/setMenuList', asyncRoutes)

          // 如果是刷新页面，需要重新导航到当前路由，以触发新添加的路由规则
          if (to.path === '/') {
            next({ path: '/', replace: true })
          }
        } else {
          // 非管理员，按照原有逻辑处理权限
          const { menus } = userInfo
          console.log('用户菜单权限:', menus)

          // 处理一级路由权限
          const firstRoutes = menus.map(item => item.split('/')[0]).filter(Boolean)
          const uniqueFirstRoutes = [...new Set(firstRoutes)]
          console.log('一级路由权限:', uniqueFirstRoutes)

          // 处理二级路由权限
          const childrenRoutes = menus.map(item => {
            const parts = item.split('/')
            if (parts.length > 1 && parts[1] && parts[2]) {
              return item
            }
          }).filter(Boolean)
          const uniqueChildrenRoutes = [...new Set(childrenRoutes)]
          console.log('二级路由权限:', uniqueChildrenRoutes)

          // 过滤路由
          const filterRoutes = asyncRoutes.filter(item => {
            return uniqueFirstRoutes.includes(item.permission)
          }).map(item => {
            return {
              ...item,
              children: item.children.filter(child => uniqueChildrenRoutes.includes(child.permission))
            }
          })

          console.log('过滤后的路由:', filterRoutes)

          // 清空菜单列表，避免重复添加
          store.commit('menu/setMenuList', [])

          // 添加动态路由
          filterRoutes.forEach(route => {
            router.addRoute(route)
          })

          // 存储菜单列表
          store.commit('menu/setMenuList', filterRoutes)

          // 如果是刷新页面，需要重新导航到当前路由，以触发新添加的路由规则
          if (to.path === '/') {
            next({ path: '/', replace: true })
          }
        }
      } catch (error) {
        console.error('获取用户信息或处理权限失败:', error)
      }
    }
  } else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
    }
  }
})

// 问题: 拦截到某个页面 登录 / 首页 -> 进度条不消失
// 原因: 主动拦截, 不会执行路由后置守卫
// 解决: 手动关闭进度条

// // 路由后置守卫
// router.afterEach((to, from) => {
//   // console.log('路由后置守卫', to)
//   if (to.meta?.title) {
//     document.title = `上海鸿蒙6期 - ${to.meta.title}`
//   }
//   // 关闭进度条
//   NProgress.done()
// })
